#include "asr_stream.h"
#include "asr_punctuation.h"
#include "llm_server.h"
#include "port_audio.h"
#include "tts_thread.h"

#include <unistd.h>
#include <memory>
#include <signal.h>
#include <unistd.h>

#include "conf.h"

namespace {
    std::unique_ptr<TtsThread>  tts;

    void audioBuffer_TransitionToEmpty_Callback(void)
    {
        sys_log("audio buffer transition to empty callback.");
        // sys_log("tts buffer empty: %s, server finished: %s", 
        //         tts->bufferEmpty() ? "true" : "false",
        //         lserver->is_post_finished() ? "true" : "false");
        // if (tts->bufferEmpty() && lserver->is_post_finished()) {
        //     sys_log("asr start ---------------------------------> ");
        //     asr->Start();
        // }
    }

    void signalHandler(int signum) {
        sys_log("signal handler .... exit ......");
        tts->audioStop();
        tts.reset();
        exit(signum);  // 释放资源
    }
}


int main(void)
{
    signal(SIGINT, signalHandler);

    // 初始化全局的 portAudio 库
    std::unique_ptr<PortAudioManager> pam = std::make_unique<PortAudioManager>();

    // 初始化语音合成类
    tts = std::make_unique<TtsThread>();
    tts->setBufferTransitionToEmptyCallback(audioBuffer_TransitionToEmpty_Callback);
    // tts->appendText("。");
    // tts->notifyInputFinished();
    tts->fillSilence();  // 避免输出杂音
    tts->audioStart();  // 启动语音输出

    // 添加文本到语音合成
    // tts->appendText("This is a 中英文的 text to speech 测试例子。");
    // tts->appendText("你好！我在呢！");
    // tts->appendText("介绍一下吴兴区ai知识产权产业园的发展情况。");
    // tts->appendText("这个是百分号和小数点测试：123.9%。");
    tts->appendText("目前目前目前目前。");

    // tts->appendText(
    // "A I 和 a i这个是百分号和小数点测试：345.1%abc。");

    // tts->appendText(
    // "你好，我是您的智能助手小知。请问有什么能帮助你的。你好。你好。");
    tts->notifyInputFinished();
    
    sleep(60 * 10);

    exit(0);
}
